# # 课后题1
# import pandas as pd
# pd.set_option('display.unicode.east_asian_width', True)
# #读取“1～3月入职员工信息.xlsx”文件4个工作表的数据
# df = pd.read_excel('1—3月入职员工信息.xlsx', index_col=0, sheet_name=['1月', '2月', '3月', '1月员工补充信息'])
# df1_1, df1_2 = df['1月'], df['1月员工补充信息']#获取1月入职员工信息及其补充信息
# df2, df3 = df['2月'], df['3月']#获取1月和2月入职员工信息
# df1 = pd.merge(df1_1, df1_2)#横向合并1月入职员工信息及其补充信息
# df_total = pd.concat([df1, df2, df3])#纵向连接1月、2月和3月入职员工的信息
# df_total = df_total.reset_index(drop=True)#重置连续行索引
# print('1～3月入职员工的信息：\n', df_total)
#
# groups = df_total.groupby('学历')         #按学历分组
# for group in groups:
#     print(group)
# print(groups.agg('mean', numeric_only=True)['基本工资'])  # 求均值聚合
# # print(groups['基本工资'].agg('mean'))  # 先筛选列再聚合



# 课后题2
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame({'班级':['一班','一班','一班','二班','二班','二班'],
                   '姓名':['刘武','王振','赵胜','赵霞','方芳','齐婷'],
                   '语文': [85, 102, 96, 126, 130, 135],
                   '数学': [100, 90, 124, 123, 140, 109],
                   '英语': [83, 110, 123, 103, 135, 90]})
print('原始数据：\n', df)
group1 = df.groupby('班级')
print('以key列按行分组：')
for i in group1:						#循环输出分组结果
    print(i)
print('每个班每个科目的平均成绩：\n', group1.agg('mean',numeric_only=True))
group2 = df.groupby({'语文': '总成绩', '数学': '总成绩', '英语': '总成绩'}, axis=1)
print('以列标签按列分组：')
for i in group2:						#循环输出分组结果
    print(i)
df['总成绩'] = group2.agg('sum')	#按行求和聚合计算每个学生的总成绩
print('添加总成绩后的数据：\n', df)

#按行求均值聚合计算每个学生的平均成绩
df['平均成绩'] = group2.agg('mean')
# # 3. 计算每个班每个科目的平均成绩（关键修正：先筛选成绩列）
# print('\n每个班每个科目的平均成绩：\n', group1[['语文', '数学', '英语']].agg('mean'))
print('添加平均成绩后的数据：\n', df)
bins_value = [0, 90, 110, 135, 150]
labels_value = ['不合格', '中', '良', '优']
df['等级'] = pd.cut(df['平均成绩'], bins=bins_value, right=False, include_lowest=True, labels=labels_value)
print('根据平均成绩判断等级后的数据：\n', df)



df = pd.DataFrame({'year':[2019,2020,None,2020,2022],
                   'month':[3,None,6,9,12],
                   'day': [4, 2, 21, 2, 15]})
print('原始数据：\n', df)
print('替换缺失值:\n',df.fillna({'year':2021,'month':9},inplace=True))
print('删除重复值:\n',df.drop_duplicates(keep=False))
df['组合时间']=pd.to_datetime(df)
print('组合后的时间:\n',df)



# 4.1.1
import numpy as np
import pandas as pd
arr = np.random.randint(1,20,size=(3,3))
df = pd.DataFrame(arr,columns=['c','b','a'])
print('原始数据:\n',df)
print('按行索引降序排序:\n',df.sort_index(ascending=False))
print('按列标签升序排序:\n',df.sort_index(axis=1))

# 4.1.2
import numpy as np
import pandas as pd
arr = np.random.randint(1,20,size=(3,3))
df = pd.DataFrame(arr)
print('原始数据:\n',df)
print('按第2行的值升序排序:\n',df.sort_values(by=1,axis=1))
print('按第2列的值升序排序:\n',df.sort_values(by=1))
df.columns=['a','b','c']
print('设置列标签后的原始数据：\n',df)
print('按a列的值降序排序:\n',df.sort_values(by='a',ascending=False))